//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: MOSCtrl.h
//创建人  	: Handry
//创建日期	: 
//描述	    : MOS管控制头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef _MOSCTRL_H_
#define _MOSCTRL_H_

//=============================================================================================
//头文件
//=============================================================================================
#include "BSPTypeDef.h"
#include "IOCheck.h"

//=============================================================================================
//宏定义
//=============================================================================================
#define 	CHG_MASK 					0x01
#define 	DSG_MASK 					0x02
#define 	PDS_MASK	 				0x04

#define 	PREDSG_ERR_TIMEOUT_MASK 	0x04
//#define 	PREDSG_ERR_5SPASS_MASK 		0x02//连续预充超过5秒置位
#define 	PREDSG_ERR_SHORT_MASK 		0x01

//#define 	CHG_MC_FAULT_TIMEOUT 		3000    //高级别故障关断延迟时间ms
#define 	CHG_MC_FAULT_TIMEOUT 		0       //充电高级别故障关断延迟时间ms
#define 	MC_FAULT_TIMEOUT 			10000   //中高级别故障关断延迟时间ms
#define 	MC_FAULT_STA_CHG_READY 		0x0001  //充电管相关高级别故障产生
#define 	MC_FAULT_STA_DSG_READY 		0x0002  //放电管相关高级别故障产生

//预放电管关闭
static __inline void PRE_DSG_DN(void)
{
	//BSPGPIOClrPin(PRE_DSG_EN_PORT,PRE_DSG_EN_PIN);
	HAL_GPIO_WritePin(PRE_DSG_EN_PORT, PRE_DSG_EN_PIN, GPIO_PIN_RESET);
}

//预放电管打开
static __inline void PRE_DSG_UP(void)
{
	//BSPGPIOSetPin(PRE_DSG_EN_PORT,PRE_DSG_EN_PIN);		//打开预放电短路检测;
	HAL_GPIO_WritePin(PRE_DSG_EN_PORT, PRE_DSG_EN_PIN, GPIO_PIN_SET);
}

#if defined(USE_B20_TOPBAND_PCBA)
#define     PRE_DCHG_OVER_CURR_LV1      487     //mV
#define     PRE_DCHG_OVER_CURR_LV2      974     //mV
#elif defined(USE_B22_IM_PCBA)
#define     PRE_DCHG_OVER_CURR_LV1      487     //mV
#define     PRE_DCHG_OVER_CURR_LV2      974    //mV
#elif defined(USE_B21_IM_PCBA)
#define     PRE_DCHG_OVER_CURR_LV1      480     //mV
#define     PRE_DCHG_OVER_CURR_LV2      1280    //mV
#endif

//=============================================================================================
//数据类型定义
//=============================================================================================
typedef struct
{
    u8 timerid[3];
    u32 timercnt[4];
    u8 sta;
    u8 mos_ctrl;
    u8 mos_fault;       //bit0: 1--充电MOS故障，bit1: 1--放电MOS故障，bit2: 1--预放电MOS故障
    u32 fault_timer1;
    u32 fault_timer2;

    //t_TASK * predsg_task;
    u8 predsg_ctrl;
    u8 predsg_inner5s;  //预充5秒过去
    u8 predsg_err;
    //u8 predsg_en;
    u8 dsg_en;
    u8 last_dsg;
    //u8 last_predsg;
    u8 predsg_flag;
    
    //新增一个引脚检测预放过载
    u8 IsPreOver400mA;

    //1.1.23 故障缓存
    u16 fault_h_buf[4];
    u32 fault_chg_timer;
    u32 fault_dsg_timer;
    u16 fault_sta;
    
    u8 chg_mos_fault_cnt:4;
    u8 dsg_mos_fault_cnt:4;    
}t_MC;

//=============================================================================================
//声明变量，供外部使用
//=============================================================================================
extern t_MC gMCData;           //mos控制结构体

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: void MOSCtrlInit(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管控制初始化函数
//注    意	:
//=============================================================================================
void MOSCtrlInit(void);

//=============================================================================================
//函数名称	: void MOSCtrlEnable(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管控制使能函数
//注    意	:
//=============================================================================================
void MOSCtrlEnable(void);

//=============================================================================================
//函数名称	: void MOSCtrlFirstPreInit(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管控制预放电任务初始化函数
//注    意	: 重新开始预放电
//=============================================================================================
void MOSCtrlFirstPreInit(void);

//=============================================================================================
//函数名称	: void MOSCtrlPreDchgTask(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管控制预放电任务函数
//注    意	: 100ms任务
//=============================================================================================
void MOSCtrlPreDchgTask(void);

//=============================================================================================
//函数名称	: void MOSCtrlMOSFaultCheck(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管失效检测任务函数
//注    意	: 100ms任务
//=============================================================================================
void MOSCtrlMOSFaultCheck(void);

//=============================================================================================
//函数名称	: void MOSCtrlMainTask(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: MOS管控制主任务函数
//注    意	:
//=============================================================================================
void MOSCtrlMainTask(void);

#endif

/*****************************************end of MOSCtrl.h*****************************************/
